/**
 *
 * @author cerimice
 */
package Dialogos.Modulo.Apartados;

import Dialogos.Modal.Entidad.Cliente.BuscarClienteDlg;
import Logica.Modulo.Apartados.GenerarApartadoLogica;
import Sistema.Configuracion;
import cerimice.ComboLista;
import com.vaadin.terminal.StreamResource;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.*;
import com.vaadin.ui.themes.BaseTheme;
import java.util.Date;
import java.util.logging.Logger;


public class GenerarApartadoDlg extends Panel
    {
    private GenerarApartadoLogica logica;
    
    private TextField       claveCliente,nombreCliente,telefonoFijoCliente,telefonoMovilCliente,numeroSerie,montoTotal,pagoInicial;
    private TextArea        descripcion;
    private ComboLista      marca;
    private Button          buscarCliente,generar,cancelar;
    private PopupDateField  fechaInicio,fechaTermino;
    
    public GenerarApartadoDlg()
        {
        logica = new GenerarApartadoLogica();
        iniciarComponentes();
        }
    
    private void iniciarComponentes()
        {
        claveCliente = new TextField("Clave Cliente");
            claveCliente.setEnabled(false);
            claveCliente.setWidth("190px");
        nombreCliente = new TextField("Nombre Cliente");
            nombreCliente.setEnabled(false);
            claveCliente.setWidth("190px");
        telefonoFijoCliente = new TextField("Telefono Fijo");
            telefonoFijoCliente.setEnabled(false);
            telefonoFijoCliente.setWidth("190px");
        telefonoMovilCliente = new TextField("Telefono Movil");
            telefonoMovilCliente.setEnabled(false);
            telefonoMovilCliente.setWidth("190px");
        buscarCliente = new Button();
            buscarCliente.setWidth("40px");
            buscarCliente.setIcon(new ThemeResource("icons/personal/iconoBuscar.png"));
            buscarCliente.setStyleName(BaseTheme.BUTTON_LINK);
            buscarCliente.addListener(new Button.ClickListener(){@Override public void buttonClick(Button.ClickEvent event){buscarCliente();}});
        
        fechaInicio = new PopupDateField("Fecha Inicio");
            fechaInicio.setValue(new java.util.Date());
            fechaInicio.setWidth("200");
            fechaInicio.setResolution(PopupDateField.RESOLUTION_DAY);
        fechaTermino  = new PopupDateField("Fecha Termino");
            fechaTermino.setValue(new java.util.Date());
            fechaTermino.setWidth("200");
            fechaTermino.setResolution(PopupDateField.RESOLUTION_DAY);
        descripcion = new TextArea("Descripción");
            descripcion.setWidth("400");
            descripcion.setHeight("65px");
        
        marca = new ComboLista("Marca");
            marca.setWidth("200px");
            try{marca.addListItems(logica.getListaMarca());}catch (Exception Ex){Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage());}
        numeroSerie = new TextField("Numero de Serie");
            numeroSerie.setWidth("200px");
        montoTotal = new TextField("Monto Total");
            montoTotal.setWidth("200px");
        pagoInicial = new TextField("Pago Inicial");
            pagoInicial.setWidth("200px");
        
        generar = new Button();
            generar.setWidth("40px");
            generar.setIcon(new ThemeResource("icons/personal/aceptar.png"));
            generar.setStyleName(BaseTheme.BUTTON_LINK);
            generar.setDescription("Generar de apartado");
            generar.addListener(new Button.ClickListener(){@Override public void buttonClick(Button.ClickEvent event){generarApartado();}});
        cancelar = new Button();
            cancelar.setWidth("40px");
            cancelar.setIcon(new ThemeResource("icons/personal/cancelar.png"));
            cancelar.setStyleName(BaseTheme.BUTTON_LINK);
            cancelar.setDescription("Cancelar generacion de apartado");
            cancelar.addListener(new Button.ClickListener(){@Override public void buttonClick(Button.ClickEvent event){cancelarApartado();}});

        VerticalLayout principal =  new VerticalLayout();
            HorizontalLayout datosCliente = new HorizontalLayout();
                datosCliente.addComponent(claveCliente);
                datosCliente.addComponent(nombreCliente);
                datosCliente.addComponent(telefonoFijoCliente);
                datosCliente.addComponent(telefonoMovilCliente);
                datosCliente.addComponent(buscarCliente);
                datosCliente.setWidth("800px");
            HorizontalLayout datosApartado = new HorizontalLayout();
                VerticalLayout datosApartadoA = new VerticalLayout();
                    datosApartadoA.addComponent(fechaInicio);
                    datosApartadoA.addComponent(fechaTermino);
                    datosApartadoA.setWidth("200px");
                VerticalLayout datosApartadoB = new VerticalLayout();
                    datosApartadoB.addComponent(marca);
                    datosApartadoB.addComponent(numeroSerie);
                    datosApartadoB.addComponent(montoTotal);
                    datosApartadoB.addComponent(pagoInicial);
                    datosApartadoB.setWidth("200px");
                datosApartado.addComponent(datosApartadoA);
                datosApartado.addComponent(descripcion);
                datosApartado.addComponent(datosApartadoB);
            HorizontalLayout operaciones = new HorizontalLayout();
                operaciones.addComponent(generar);
                operaciones.addComponent(cancelar);
                
            principal.setWidth("810px");
            principal.addComponent(datosCliente);
            principal.addComponent(datosApartado);
            principal.addComponent(operaciones);
            principal.setComponentAlignment(datosCliente, Alignment.TOP_CENTER);
            principal.setComponentAlignment(datosApartado, Alignment.TOP_CENTER);
            principal.setComponentAlignment(operaciones, Alignment.TOP_CENTER);
            
        this.setCaption("GENERACIÓN DE APARTADOS");
        this.addComponent(principal);
        }
    
    private void buscarCliente()
        {
        getWindow().addWindow(new BuscarClienteDlg("Busqueda de Cliente",claveCliente,nombreCliente,telefonoFijoCliente,telefonoMovilCliente));
        String cliente = (String)claveCliente.getValue();
        if(cliente.equals("")){return;}
        }
    private void generarApartado()
        {
        try
            {
            String  claveClienteDts = (String)claveCliente.getValue();
            Date    fechaInicioDts  = (java.util.Date)fechaInicio.getValue();
            Date    fechaTerminoDts = (java.util.Date)fechaTermino.getValue();
            String  descripcionDts  = (String)descripcion.getValue();
            String  marcaDts        = marca.getSelectedKey();
            String  numeroSerieDts  = (String)numeroSerie.getValue();
            String  montoTotalDts  = (String)montoTotal.getValue();
            String  pagoInicialDts  = (String)pagoInicial.getValue();
            if(logica.agregarObjeto(claveClienteDts,fechaInicioDts,fechaTerminoDts,descripcionDts,marcaDts,numeroSerieDts,montoTotalDts,pagoInicialDts))
                {
                cancelarApartado();
                reportePDF();
                }
            else
                {getWindow().showNotification("Generar Apartado...",logica.getError(),Window.Notification.TYPE_WARNING_MESSAGE); return;}
            }
        catch (NullPointerException Ex)
            {getWindow().showNotification("Generar Apartado...","Por favor selecciones una marca",Window.Notification.TYPE_WARNING_MESSAGE); return;}
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage());}
        }
    
    private void cancelarApartado()
        {
        claveCliente.setValue("");
        nombreCliente.setValue("");
        telefonoFijoCliente.setValue("");
        telefonoMovilCliente.setValue("");
        numeroSerie.setValue("");
        pagoInicial.setValue("");
        montoTotal.setValue("");
        descripcion.setValue("");
        marca.setSelectedKey("");
        fechaInicio.setValue(new java.util.Date());
        fechaTermino.setValue(new java.util.Date());
        }
    
    private void reportePDF()
        {
        try
            {
            Window window = new Window();
                ((VerticalLayout) window.getContent()).setSizeFull();
                window.setResizable(true);
                window.setWidth("800");
                window.setHeight("600");
                window.center();
            Embedded e = new Embedded();
                e.setSizeFull();
                e.setType(Embedded.TYPE_BROWSER);
                StreamResource resource = new StreamResource(logica.reporteGenerarApartado(), "OrdenDeApartado"+System.currentTimeMillis()+".pdf",this.getApplication());
                resource.setMIMEType("application/pdf");
                e.setSource(resource);
            window.addComponent(e);
            this.getApplication().getMainWindow().addWindow(window);
            }
        catch (Exception ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());}
        }
    }
